Published: May 28, 2025
Unless otherwise noted, the following changes apply to the newest Chrome beta channel release for Android, ChromeOS, Linux, macOS, and Windows. Learn more about the features listed here through the provided links or from the list on ChromeStatus.com. Chrome 138 is beta as of 28 May, 2025. You can download the latest on Google.com for desktop or on Google Play Store on Android.
CSS and UI
This release adds six new CSS and UI features.
CSS stretch
sizing keyword
A keyword for CSS sizing properties (for example, width
, and height
) that
allows elements to grow to exactly fill their containing block's available
space. It is similar to 100%
, except the resulting size is applied to the
element's margin box instead of the box indicated by box-sizing
. Using this
keyword allows the element to keep its margins while still being as large as
possible.
CSS sign-related functions: abs()
, sign()
The sign-related functions abs()
and sign()
compute various functions
related to the sign of their argument.
CSS env variable for OS-level font scale
Exposes a user's preferred font scale to CSS. Currently, it is not practical for a page to detect if the user has changed their preferred font size with the Operating System's preferences. This CSS environment variable will reflect the scale chosen by the user.
CSS sibling-index()
and sibling-count()
The sibling-index()
and sibling-count()
functions can be used as integers in
CSS property values to style an element based on its position among its
siblings, or the total number of siblings respectively. These functions can be
used directly as integer values, but more interestingly inside calc()
expressions.
li {
animation-delay: calc(0.1s * sibling-index());
}
Interpolation progress functional notation: CSS progress()
function
The progress()
functional notation is a math function that returns a
<number>
value representing the position of one calculation (the progress
value) between two other calculations (the progress start value and progress end
value).
Viewport Segments Enumeration API
The Viewport Segments API allows developers to adapt their web layout to target foldable devices. Viewport segments define the position and dimensions of a logically separate region of the viewport. Viewport segments are created when the viewport is split by one or more hardware features (such as a fold or a hinge between separate displays) that act as a divider; segments are the regions of the viewport that can be treated as logically distinct by the developer.
Web APIs
Add support for video frame orientation metadata to WebCodecs
Introduces rotation: int
and flip: bool
values to various video related
interfaces in WebCodecs so that developers can work with frame sources that have
orientation (for example, Android cameras, and certain media). The VideoFrame
interface grows the ability to create VideoFrames with arbitrary rotation and
flip as well as accessors for this information on the VideoFrame
object. The
VideoDecoderConfig
object gains rotation
and flip
fields that are emitted
on decoded VideoFrame objects automatically. The VideoEncoder
class gains
mechanisms for passing rotation and flip information from encode()
to the
VideoDecoderConfig
emitted as part of EncodedVideoChunkMetadata
. If
encode()
is called with frames with different orientationnonfatalatal
exception will be thrown. The configure()
method can be used to reset the
allowed orientation.
Crash Reporting API: is_top_level
and visibility_state
This feature adds is_top_level
and visibility_state
string fields to the
crash reporting API body that gets sent to the default reporting endpoint for
crash reports.
Escape <
and >
in attributes on serialization
Escape <
and >
in values of attributes on serialization. This mitigates the
risk of mutation XSS attacks, which occur when the value of an attribute is
interpreted as a start tag token after being serialized and re-parsed.
Integrity Policy for scripts
Subresource-Integrity (SRI) enables developers to make sure the assets they
intend to load are indeed the assets they are loading. But there's no current
way for developers to be sure that all of their scripts are validated using SRI.
The Integrity-Policy
header gives developers the ability to assert that every
resource of a given type needs to be integrity-checked. If a resource of that
type is attempted to be loaded without integrity metadata, that attempt will
fail and trigger a violation report.
Predictable reported storage quota
Report a predictable storage quota from StorageManager's Estimate API for sites that don't have unlimited storage permissions. It is possible to detect a user's browsing mode using the reported storage quota because the storage space made available is significantly smaller in incognito mode than in regular mode.
This is a mitigation that prevents detection of a user's browsing mode using the storage API by reporting an artificial quota, equal to usage + min(10 GiB, disk rounded up to the nearest 1 GiB), in all browsing modes for sites with limited storage permissions. Sites with unlimited storage permissions will be unaffected. Enforced quota will also be unaffected.
pushsubscriptionchange
event upon resubscription
Fire the pushsubscriptionchange
event in service workers when an origin for
which a push subscription existed in the past, but which was revoked because of
a permission change (from granted to deny/default), is re-granted notification
permission. The event will be fired with an empty oldSubscription
and
newSubscription
.
Speculation rules: Add prefetchCache
and prerenderCache
to Clear-Site-Data
header
Two new values for the Clear-Site-Data
header to help developers target
clearing the prerender and prefetch cache: prefetchCache
and prerenderCache
.
These can be sent on any requests and don't need to be made on the document
request (for example, they can be returned on add-to-basket, or login and logout API
call responses to clear speculations on state change).
Speculation rules: target_hint
field
This extends speculation rules syntax to allow developers to specify the
target_hint
field. This field provides a hint to indicate a target navigable
where a prerendered page will eventually be activated. When _blank
is
specified as a hint, a prerendered page can be activated for a navigable opened
by window.open()
. The field is not supported for prefetching.
Strict Same Origin Policy for Storage Access API
Adjusts the Storage Access API semantics to strictly follow the Same Origin
Policy, with regard to security. That is, using
document.requestStorageAccess()
in a frame only attaches cookies to requests
to the iframe's origin (not site) by default.
Summarizer API
A JavaScript API for producing summaries of input text, backed by an AI language
model. Browsers and operating systems are increasingly expected to gain access
to a language model. By exposing this built-in model, we avoid every website
needing to download their own multi-gigabyte language model, or send input text
to third-party APIs. The summarizer API in particular exposes a high-level API
for interfacing with a language model in order to summarize inputs for a variety
of use cases in a way that does not depend on the specific language model in
question. An enterprise policy (GenAILocalFoundationalModelSettings
) is
available to disable the underlying model downloading which would render this
API unavailable.
Learn more in Generate concise summaries with built-in AI.
Language Detector API
A JavaScript API to detect what language is used in certain text, with levels of confidence. This is an important supplement to translation is language detection and can be used in combination with the Translator API. For example, take user input in an unknown language, determine its language, then translate it to a specific target language. While Browsers often already have language detection capabilities, this offers the same power to web developers with a JavaScript API, supplementing the translation API.
An enterprise policy (GenAILocalFoundationalModelSettings
) is available to
disable the underlying model from downloading, which would make this API
unavailable.
Learn more in Detect which language is used with built-in AI.
Translator API
A JavaScript API to provide language translation capabilities to web pages.
While browsers are increasingly offering language translation to their users,
such translation capabilities can also be useful to web developers. This is
especially the case when browser's built-in translation abilities cannot help,
such as with live and interactive services. An enterprise policy
(GenAILocalFoundationalModelSettings
) is available to disable the underlying
model downloading which would render this API unavailable.
Learn more in Translation with built-in AI.
Web app scope extensions
Adds a "scope_extensions"
web app
manifest field that lets web apps extend their scope to other origins. This lets
sites that control multiple subdomains and top level domains be presented as a
single web app. Requires listed origins to confirm association with the web app
using a .well-known/web-app-origin-association
configuration file.
Web serial over Bluetooth on Android
This feature allows web pages and web apps to connect to serial ports over
Bluetooth on Android devices. Chrome on Android
now supports Web Serial API over Bluetooth RFCOMM. Existing enterprise policies
(DefaultSerialGuardSetting
, SerialAllowAllPortsForUrls
,
SerialAllowUsbDevicesForUrls
, SerialAskForUrls
, and SerialBlockedForUrls
)
on other platforms are enabled in future_on states for Android. All policies
except SerialAllowUsbDevicesForUrls
will be enabled after the feature is
enabled. SerialAllowUsbDevicesForUrls
will be enabled in a future launch after
Android provides system level support of wired serial ports.
Deprecations and removals
This version of Chrome introduces the following deprecations and removals. Visit ChromeStatus.com for lists of planned deprecations, current deprecations and previous removals.
This release of Chrome deprecates two features.
Deprecate asynchronous range removal for Media Source Extensions
The Media Source standard long ago changed to disallow ambiguously defined behavior involving asynchronous range removals:
SourceBuffer.abort()
no longer abortsSourceBuffer.remove()
operations.- Setting
MediaSource.duration
can no longer truncate currently buffered media.
Exceptions will now be thrown in both of these cases.
Remove SwiftShader fallback
Allowing automatic fallback to WebGL backed by the software renderer SwiftShader is deprecated and WebGL context creation will fail instead of falling back to SwiftShader. This was done for two primary reasons:
- SwiftShader is a high security risk due to JIT-ed code running in Chromium's GPU process.
- Users have a poor experience when falling back from a high-performance GPU-backed WebGL to a CPU-backed implementation. Users have no control over this behavior and it is difficult to describe in bug reports.
During the deprecation period, a warning will appear in the Chrome DevTools
console when a WebGL context is created and backed with SwiftShader. Passing
--enable-unsafe-swiftshader
will remove this warning message.